﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using Bovespa.Infra.Web.Security;
using Bovespa.Infra.Web.UI;
using Bovespa.CAS.Shell.Presenters;
using Telerik.WebControls;

/// <summary>
/// Classe publica de manipulacao da pagina ServerSideConfirm.aspx
/// </summary>
public partial class ServerSideConfirm : BovespaPage<ConfirmPresenter>, IConfirm
{
    #region Propriedades
        
    [CreateNew]
    public override ConfirmPresenter Presenter
    {
        get { return this.BasePresenter; }
        set
        {
            this.BasePresenter = value;
            this.BasePresenter.View = this;
        }
    }

    #endregion

    #region Eventos
    
    protected override void InitializeView()
    {
        this.Presenter.OnViewInitialized();
    }
        
    protected override void LoadView()
    {
        this.Presenter.OnViewLoaded();
        
        //ATENÇÂO: É opbrigatório criar este EventHandler para utilizar o ShowConfirm/ShowMessage
        this.MessageClick += new EventHandler<Bovespa.Infra.Web.Composite.MessageArgs>(ServerSideConfirm_MessageClick);

        this.CarregarGrid();
    }

    void ServerSideConfirm_MessageClick(object sender, Bovespa.Infra.Web.Composite.MessageArgs e)
    {
        //e.Type == Indica se o evento foi disparado de um ShowConfirm ou ShowMessage
        //e.Action == Recebe o action informado na chamada do método
        //e.value == No caso do confirm retorna True/False para identificar se o cliente clicou em OK ou Cancelar
        if (e.Type == Bovespa.Infra.Web.Composite.MessageType.Confirm && e.Action.Equals("RemoverProduto") && e.Value == true)
        {
            int productId = Convert.ToInt32(ViewState["productId"]);
            Presenter.RemoveProduct(productId);
            this.ShowMessage("Mensagem", "Produto removido com sucesso", "RemovidoSucesso");
        }
        else if (e.Type == Bovespa.Infra.Web.Composite.MessageType.Message && e.Action.Equals("RemovidoSucesso"))
        {
            this.CarregarGrid();
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    protected void grdServerSideConfirm_ItemCommand(object source, Telerik.WebControls.GridCommandEventArgs e)
    {
        if (e.CommandArgument.Equals("Remover"))
        {
            ViewState["productId"] = (e.Item as GridDataItem)["productId"].Text;
            this.ShowConfirm("Atenção", "Deseja realmente remover o produto " + (e.Item as GridDataItem)["productName"].Text + " ?", "RemoverProduto");
        }
    }

    /// <summary>
    /// Evento executado ao clicar no botao de pesquisa
    /// </summary>
    protected void btnPesquisa_Click(object sender, EventArgs e)
    {
        this.CarregarGrid();
    }

    /// <summary>
    /// Método para popular a grid
    /// </summary>
    public void CarregarGrid()
    {
        grdServerSideConfirm.DataSource = Presenter.GetProducts();
        grdServerSideConfirm.DataBind();
    }

    /// <summary>
    /// Evento executado pelo grid para consultar a fonte de dados
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    protected void grdServerSideConfirm_NeedDataSource(object source, Telerik.WebControls.GridNeedDataSourceEventArgs e)
    {
        if (IsPostBack)
        {
            grdServerSideConfirm.DataSource = Presenter.GetProducts();
        }
    }
    
    #endregion
}
